//
//  YWVideoPlayerManager.h
//  videoTest3
//
//  Created by jun peng on 2022/5/30.
//

#import <Foundation/Foundation.h>

#import "Single.h"

//#import "YWVideoItem.h"
#import "YWGetNewsDataStatus.h"

#import <TXLiteAVSDK_Player/TXLiteAVSDK.h>

#import "YWVodPlayer.h"

#import "YWPlayerStatus.h"

#import "YWKLineCheatsVideoListDataStatus.h"

NS_ASSUME_NONNULL_BEGIN



#pragma mark - 这里作为当前播放视频模型要保存的属性 （只抽取了我认为有用的属性保存）
///当前播放视频的信息
@interface YWCurrentVideoMessageModel : NSObject

////////////////////////////////////////////////////////////////////////////

//    player不需要item，它们不是包含关系
/** 播放模型 */
//@property (nonatomic ,strong,readonly) YWVideoItem  *item;

/** 播放路径 */
@property (nonatomic ,copy,readonly) NSString  *urlString;

//播放器(这里只读、为了读取player里面属性) //当前正在播放的播放器、里面就有更多你想知道的属性了
@property (nonatomic,strong,readonly)YWVodPlayer *player;



//好像只在列表VC弄一个正在播放index属性好一点、因为只是列表VC想知道“自己”的currentIndex、详情VC不想知道
//0、这个当前播放的视频所在列表的位置、假如是列表传过来详情的就保存列表的位置（详情页返回去列表页能找到原来的列表cell位置继续播放就根据这个）✖️
//1、假如是如推送直接去详情的就默认是-1✖️
//2、假如是在详情页切换了URL就把它变成-1✖️
//通过URL在player字典找到播放模型，通过这个模型在列表数组找到列表对应位置currentIndex✖️✖️
//3、通过正在播放的currentPlayer的URL遍历数组找到对应的模型和index、假如找不到就把它变成-1、证明这个视频不是列表视频是详情视频✖️
//@property(nonatomic, assign,readonly) NSInteger currentIndex;✖️

////////////////////////////////////////////////////////////////////////////

/** 当前已经播放的时间 */
@property(nonatomic, assign,readonly) NSTimeInterval costTime;

/** 总时长 */
@property(nonatomic, assign,readonly) NSTimeInterval totalTime;

/** 可播放时长 */ //（这个可以制造缓冲进度条）
@property(nonatomic, assign,readonly) NSTimeInterval playableDuration;

////////////////////////////////////////////////////////////////////////////

/** 当前是否有正在播放 */
@property(nonatomic, assign,readonly) BOOL isPlaying;

/** 当前是否有静音 */
@property(nonatomic, assign,readonly) BOOL mute;

/** 视频宽高比 */
@property(nonatomic, assign,readonly) CGFloat videoRatio;

////////////////////////////////////////////////////////////////////////////

@end



@interface YWVideoPlayerManager : NSObject

//单例
SingleH(videoPlayerManager)


///////////////////////////////////////////////////////、、、1、获取当前播放视频的信息
///

#pragma mark - 1
//正在播放的信息
@property (nonatomic, strong, readonly) YWCurrentVideoMessageModel *currentVideoMessageModel;

///////////////////////////////////////////////////////、、、2、数组&字典

//不需要数组了，改为方法、因为我不需要保存这个数组、不需要get方法、只是为了把数组模型里面的东西转换为播放器字典存储
//装列表模型的数组（外面列表的模型封装成YWVideoItem再装去数组传过来给我里面处理） （和resumePlayWithItem配合使用）
//@property (nonatomic, strong) NSMutableArray <YWVideoItem *>*statusItemArray;

#pragma mark - 2
//预加载这个数组
-(void)preLoadUrlArray:(NSArray <NSString *>*)urlArray;


//先不要这个了
//要预加载播放的视频模型的字典（URL作为Key）
//@property (nonatomic, strong,readonly) NSMutableDictionary *videoItemDictionary;

//#pragma mark - 3
////要预加载播放的视频播放器的字典（URL作为Key）
//@property (nonatomic, strong,readonly) NSMutableDictionary *playerDictionary;



//这里存播放器模型不存播放器了
@property (nonatomic, strong,readonly) NSMutableDictionary *playerStatusDictionary;




///////////////////////////////////////////////////////、、、3、操控视频方法

#pragma mark - 3
// 调整当前歌曲的播放进度
- (void)seekToTime:(NSTimeInterval)time;

// 设置是否静音
- (void)setMute:(BOOL)isMute;
/**
 * 设置播放速率
 * @param rate 正常速度为1.0；小于为慢速；大于为快速。最大建议不超过2.0
 */
- (void)setRate:(float)rate;

/**
 * 设置音量大小
 * @param volume 音量大小。范围：0 ~ 100。
 */
- (void)setAudioPlayoutVolume:(int)volume;

///////////////////////////////////////////////////////、、、4、播放暂停继续停止方法

#pragma mark - 4
//（适合详情播放）（这说法不对、我现在改成了startPlayWithItem里面有两种情况判断、既包含了列表视频也包含了详情视频，有start和resume）
-(void)startPlayWithUrl:(NSString *)fileUrl view:(UIView *)videoView complication:(void(^)(void))complication startPlay:(void(^)(void))startPlayBlock progress:(void(^)(float progress,float duration,float playable))progressBlock end:(void(^)(void))endBlock loading:(void(^)(void))loadingBlock;

//去其它view继续播放，但不要先停止之前正在播放的
-(void)continuePlayWithAnthorView:(UIView *)videoView complication:(void(^)(void))complication startPlay:(void(^)(void))startPlayBlock progress:(void(^)(float progress,float duration,float playable))progressBlock end:(void(^)(void))endBlock loading:(void(^)(void))loadingBlock;

//这个不需要了、统一用startPlayWithItem、我在startPlayWithItem做了判断两种情况、相当于包含了resumePlayWithItem
//预加载过的播放 (和statusItemArray配合、适合列表播放)
//-(void)resumePlayWithItem:(NSString *)fileUrl view:(UIView *)videoView complication:(void(^)(void))complication startPlay:(void(^)(void))startPlayBlock progress:(void(^)(float progress,float duration))progressBlock end:(void(^)(void))endBlock loading:(void(^)(void))loadingBlock;


//停止播放
-(void)stopPlayWithComplication:(void(^)(void))complication;



//暂停播放
-(void)pausePlayWithComplication:(void(^)(void))complication;

//继续播放
-(void)continuePlayWithComplication:(void(^)(void))complication;


///////////////////////////////////////////////////////


- (void)snapshot:(void (^)(UIImage *))snapshotCompletionBlock;

//工具方法
// 将当前时间变成字符串
+(NSString *)stringWithTime:(NSTimeInterval)time;



//能在本地播放还是只能在网上播放 (开始的)
+(void)videoPlayWithKLineCheatsVideoListDataStatus:(YWKLineCheatsVideoListDataStatus *)status canPlayLoacalWithFullPathBlock:(void(^)(NSString *fullPath))canPlayLoacalWithFullPathBlock onlyCanPlayWebWithVideoUrlBlock:(void(^)(NSString *videoUrl))onlyCanPlayWebWithVideoUrlBlock;




@end

NS_ASSUME_NONNULL_END
